package com.cloudcross.ssp.base.service;

import java.util.List;
import java.util.Map;

import com.cloudcross.ssp.common.consts.Status;
import com.cloudcross.ssp.common.utils.Pager;

/**
 * 通用service定义。
 * 
 * @author wuqiang.du
 * 
 * @param <T>
 *            实体类型
 */
public interface IGenericService<T> {
	/**
	 * 通过主键查找实体对象<code>T</code>。
	 * 
	 * @param id
	 *            主键
	 * 
	 * @return 返回<code>T</code>
	 */
	T findById(Long id);

	/**
	 * 根据查询条件计算数据库中该实体<code>T</code>对应记录总数。
	 * 
	 * @param paramMap
	 *            查询条件
	 * @return 返回查询到的总数
	 */
	int countByParams(Map<String, Object> paramMap);

	/**
	 * 根据查询条件按页统计数据库中该实体<code>T</code>对应记录并以列表返回。
	 * 
	 * @param paramMap
	 *            查询条件
	 * @param pager
	 *            {@link Pager}
	 * @return 返回查询到记录列表
	 * @see Pager
	 */
	List<T> findByParams(Map<String, Object> paramMap, Pager pager);

	/**
	 * 向数据库中添加一个实体对象<code>T</code>。
	 * 
	 * @param t
	 *            实体对象
	 * @return <code>true</code>代表成功，否则代表失败。
	 */
	boolean add(T t);

	/**
	 * 编辑数据库中一个实体对象<code>T</code>。
	 * 
	 * @param t
	 *            实体对象
	 * @return <code>true</code>代表成功，否则代表失败。
	 */
	boolean edit(T t);

	/**
	 * 根据主键批量更新实体状态。
	 * 
	 * @param idList
	 *            主键
	 * @param status
	 *            状态字段。
	 * @return <code>true</code>代表成功，否则代表失败。
	 * @see Status
	 */
	boolean updateStatus(List<Long> idList, int status);
}